블로그
카테고리 이동
지금까지 여러 기법과 함수, 코드를 통해 본격적인 학습을 위한 준비작업을 진행했다.
파이썬 으로 학습시키는 코드를 짤 때 매번 느끼는 거지만 참...
학습 전까지의 코드량이 약 90% 정도 된다면, 막상 학습은 기껏해야 1, 2%, 학습 후 시각화와 결과 리뷰 코드가 8, 9%의 분량밖에 되지 않는다.
그럼에도 불구하고 이 1, 2%의 코드량을 가지고 매달려야 하는 경우가 종종 있다.
모델이 학습하는 방법과 정도 그리고 기간에 대해 정해줘야 내가 원하는 학습이 되기 때문이다.
마치 아이를 그냥 집에서 내보내면서 놀고와라라고 하는 것보다
아이에게 몇시부터 몇시까지, 친구들과 축구를 하면서, 다치지 않게 조심히 놀고와라라고 하는 것이
부모가 바라는 경험을 아이가 쌓을 수 있도록 하는 것처럼 말이다.
파이썬 모델 학습 에서 그런 역할을 해주는 함수가 바로 '콜백함수(Callback)' 이다.
모델 학습에서의 콜백함수(Callback Function)
'콜백함수' 의 정의는 '함수 호출 시에 알고리즘을 입력 인자로 전달하고, 호출받은 함수에서는 전달받은 알고리즘을 호출하여 사용하는 역할' 이라고 하고 있다. 어렵다 어려워 (출처: 위키독스)
파이썬 모델 학습 에서도 콜백함수 는 학습 함수에 전달되어 '조건' 처럼 쓰이게 된다.
파이썬 모델 학습 에서 쓰는 콜백함수 는 아래의 페이지에서 잘 정리를 해주고 있다. (Keras 기준)[Callbacks - Keras Documentation
Keras Documentation Home Why use Keras Getting started Models Layers Preprocessing Losses Metrics Optimizers Activations Callbacks Usage of callbacks 콜백 BaseLogger TerminateOnNaN ProgbarLogger History ModelCheckpoint EarlyStopping RemoteMonitor LearningRateScheduler TensorBoard ReduceLROnPlateau CSV...
keras.io
](https://keras.io/ko/callbacks/)
다만 위 페이지에서는 콜백함수 를 전부다 소개하다보니 양이 많은데
짧은 경력이지만 모델 학습 에서 주로 본 콜백함수 는 'ReduceLROnPlateau' 와 'EarlyStopping' 이다.
그리고 모델 학습 에 있어 콜백함수 를 쓰려면 꼭 사전에 'from keras.callbacks import ReduceLROnPlateau 혹은 EarlyStopping' 을 선언하고 써야 한다.
케라스 모델 학습 콜백함수 불러오기
콜백함수 'ReduceLROnPlateau '는 학습 결과지표의 개선 정도에 따라 Learning Rate의 크기를 조절하는 콜백함수 이다.
하이퍼파라미터 에는 monitor와 factor, verbose, patience, min_lr 등이 있다.
- monitor : 관찰할 학습결과지표
- factor: 학습 속도를 얼마나 줄일지 그 크기
- verbose: 0 - 자동 적용 / 1 - 최신화 메시지
- patience : 학습결과지표의 연속된 미개선에 대해 몇 번 연속 미개선까지 기다릴지 그 횟수
(예를 들어 patience가 3이라면, 3번 연속으로 개선이 없다면 learning rate에 factor를 적용하여 낮춤)
- min_lr : 최소 적용 학습속도
케라스 모델 학습 콜백함수 ReduceLROnPlateau
콜백함수 'EarlyStopping' 은 ReduceLROnPlateau 보다 인내심이 적은 편이다.
학습결과지표에 대해 어느 정도 선까지 개선이 없다면 학습을 멈춰버리는 콜백함수 이다.
하이퍼파라미터 에는 monitor, min_delta, patience, verbose, mode, baseline, restore_best_weights가 있다.
(하이퍼파라미터 에 대한 설명은 케라스 홈페이지의 그림으로 대체하겠다.)
케라스 모델 학습 콜백함수 EarlyStopping (출처: keras.io)
콜백함수 ReduceLROnPlateau 를 쓰면 이렇게 내가 설정한 100번 동안 알아서 학습률을 조정하면서 각 차수마다 학습된 결과를 보여준다.
학습결과가 물론 마음에 들지 않을 수 있다.
이러한 경우에는 모델 학습에 사용된 하이퍼파라미터 를 튜닝 해야 한다.
조금씩 조금씩 바꿔가며 돌리는 방법도 있겠지만 (일명 노가다라고 하죠)
그것보다는 그리드서치 로 현명하게 최적의 하이퍼파라미터 를 찾아나가는 것이 좋을 듯하다.
파이썬 모델 학습 결과 그래프와 표로 출력하기
학습은 다 했고, 이걸 이제 그래프 로 그려서 학습 결과를 보여줄 준비를 한다.
학습 결과를 그래프 로 그리기 위해서는 matplotlib library 를 이용한다. (import matplotlib.pyplot as plt)
그리고 베이스라인으로 이용한 모델에서 매우 감사하게도 그래프 를 그리는 코드를 만들어주셨기에 해당 코드를 이용했다.
먼저 사이즈를 정해주고, 어떤 데이터가 표현될지, 제목과 범례를 어떻게 할지, 그리고 x축 label 이름을 어떻게 표현할지 등등을
코드 한 줄 한 줄마다 지정해 준 후 'plt.show()' 함수를 통해 그래프 를 그려라라고 명령해준다고 보면 된다.
학습 결과 그래프로 그리는 코드 (matplotlib 라이브러리 활용)
학습결과 그래프 표현 - 이미 epoch 60 즈음부터 학습 과정이 수렴되었음을 알 수 있다.
그리고 모델 학습 결과 에 대해 f1 score, accuracy 등 학습결과지표들도 숫자로 확인해볼 필요 가 있다.
그때에는 classification_report 라는 함수를 이용하면 precision, recall, f1 score, support 에 대해서
각 feature별로 그리고 총괄적인 결과를 보여준다.
classification report 확인 결과, 나름 accuracy도 90% 이상, f1 score도 0.9 이상의 좋은 결과를 보여준다.
실제 상황에서도 쓸 가치가 있다는 말이다.
그럼 당연히 실제 동영상에서도 감정 분석을 해봐야지 않겠는가.
다음 글에서는 실제 동영상에 대해 감정 분석을 하는 과정에 대해 (동영상 전처리와 적용)
리뷰를 해보도록 하겠다.
※ 베이스라인으로 활용한 코드 (SER: Speech Emotion Recognition)
물론 이전 과정에서도 많은 도움이 되었지만 특히 학습 부분, 리뷰 부분에서 많은 도움이 되었다.
베이스라인 코드가 있었기에 이런 결과물을 만들 수 있었다.[ETRI AI 나눔
음성 감정인식 데이터셋 등록자 성정환 등록일 (수정일 ) 2021-11-16 22:40 (2021-11-21 23:41) 조회수 805 접근 횟수 60 추가업로드 가능 좋아요 5 내용 토론장 (2) 활동내역 Description 1. 음성 감정인식 이란? 음성 감정인식 은 사용자의 음성 데이터를 분석하여 감정을 판단하는 기술이다. 음성을 분석하는 방법에 있어서 여러가지 방법이 있는데, 음성을 텍스트로 전...
nanum.etri.re.kr
](https://nanum.etri.re.kr/share/mn99134/speechemotion?lang=ko_KR)